home *** CD-ROM | disk | FTP | other *** search
/ Sun Solutions 1997 April to September / Sun Solutions CD - APR '97 - SEP '97 (704-3778-12 Rev. H)(Sun Microsystems, Inc.)(1997).iso / products / bin / gui / win32 / src / cpp.cpp next >
C/C++ Source or Header  |  1997-02-26  |  11KB  |  386 lines

  1. /***************************************************************************
  2. *
  3. *  Filename:  Doperl.cpp
  4. *
  5. *  Main routine to execute perl scripts using registry information.
  6. *
  7. *  Date  :   11/20/1995
  8. *  Changed By Marc Sacoolas 
  9. ****************************************************************************/
  10.  
  11. #include <windows.h>
  12. #include <stdio.h>
  13. #include <stdlib.h>
  14. #include <process.h>
  15. #include <errno.h>
  16. #include <string.h>
  17.  
  18.  
  19.  
  20. void ErrorLog(int errno)
  21. {
  22.     switch (errno) 
  23.     {
  24.         case 1:
  25.             printf("change directory failed \n");
  26.             break;    
  27.             
  28.         default:    
  29.            printf("Content-type: text/html\n\n");
  30.            printf("<p><p><p><h2>The search portion of this software is not properly installed. Please re-install the software.</h2>\n");
  31. //           printf("ErrorCode: %d\n", errno);
  32.         break;
  33.     }
  34. }
  35.  
  36. void main(int argc, char **argv)
  37. {
  38.  
  39.       char *getQuery(char *s);
  40.     /*  open appropriate registry keys  */
  41.  
  42. //#if 0    
  43.     HKEY  softKey,archKey, discKey,volKey;
  44.     LONG  errVal;
  45.     /* open software hive using LOCAL_MACHINE */
  46.     if ((errVal=RegOpenKeyEx(HKEY_LOCAL_MACHINE,(LPCTSTR)"Software",0,KEY_ALL_ACCESS,
  47.                      &softKey)) != ERROR_SUCCESS) {
  48.         ErrorLog(2);
  49.         printf("Unable to open the hive HKEY_CURRENT_USER\\Software\n");
  50.         printf("ErrorCode: %d\n", errVal);
  51.  
  52.     }
  53.     /* SunSoft Dir */
  54.     if ((errVal=RegOpenKeyEx(softKey,(LPCTSTR)"SunSoft",0,KEY_ALL_ACCESS,
  55.                      &archKey)) != ERROR_SUCCESS) {
  56.         ErrorLog(3);
  57.         printf("Unable to open the hive SunSoft");    
  58.         printf("ErrorCode: %d\n", errVal);
  59.  
  60.     }
  61.     /* discKey Dir */
  62.     if ((errVal=RegOpenKeyEx(archKey,(LPCTSTR)"Sun Solutions CD",0,KEY_ALL_ACCESS,
  63.                      &discKey)) != ERROR_SUCCESS) {
  64.         ErrorLog(3);
  65.         printf("Unable to open the hive discKey");    
  66.         printf("ErrorCode: %d\n", errVal);
  67.  
  68.     }
  69.     /* get specific volume of CD */ 
  70.     if ((errVal=RegOpenKeyEx(discKey,(LPCTSTR)"April 1997",0,KEY_ALL_ACCESS,
  71.                      &volKey)) != ERROR_SUCCESS) {
  72.         ErrorLog(3);
  73.         printf("Unable to open the hive April 1997\n");    
  74.         printf("ErrorCode: %d\n", errVal);
  75.     
  76.     }
  77.  
  78. /* get values from hive. 
  79.      * get the PATH */
  80.     char PATH[_MAX_PATH], CLASSPATH[_MAX_PATH],JAVA_EXE[_MAX_PATH],JAVAHOME[_MAX_PATH],PRODDIR[_MAX_PATH],NETSCAPEHOME[_MAX_PATH];
  81.     
  82.     DWORD  dwLen = _MAX_PATH;
  83.     
  84.     if ((errVal=RegQueryValueEx(volKey,(LPTSTR)"PATH",0,NULL,
  85.                         (unsigned char *)PATH,&dwLen)) != ERROR_SUCCESS) {
  86.         ErrorLog(6);
  87. printf("Unable to open PATH\n");        
  88.         printf("ErrorCode: %d\n", errVal);
  89.     
  90.     }
  91.     /* get the CLASSPATH */
  92.  
  93.     dwLen = _MAX_PATH;
  94.  
  95.     if ((errVal=RegQueryValueEx(volKey,(LPTSTR)"CLASSPATH",0,NULL,
  96.                         (unsigned char *)CLASSPATH,&dwLen)) != ERROR_SUCCESS) {
  97.         ErrorLog(7);
  98.     printf("Unable to open CLASSPATH\n");
  99.     printf("ErrorCode: %d\n", errVal);
  100.     
  101.     }
  102.     /* get the JAVA_EXE */
  103.  
  104.     dwLen = _MAX_PATH;
  105.  
  106.     if ((errVal=RegQueryValueEx(volKey,(LPTSTR)"JAVA_EXE",0,NULL,
  107.                         (unsigned char *)JAVA_EXE,&dwLen)) != ERROR_SUCCESS) {
  108.         ErrorLog(7);
  109.     printf("Unable to open JAVA_EXE\n");
  110.     printf("ErrorCode: %d\n", errVal);
  111.     
  112.     }
  113.     /* get the JAVAHOME*/
  114.         dwLen = _MAX_PATH;
  115.  
  116.     if ((errVal=RegQueryValueEx(volKey,(LPTSTR)"JAVAHOME",0,NULL,
  117.                         (unsigned char *)JAVAHOME,&dwLen)) != ERROR_SUCCESS) {
  118.         ErrorLog(7);
  119.     printf("Unable to open JAVAHOME\n");
  120.     printf("ErrorCode: %d\n", errVal);
  121.     
  122.     }
  123.     /* get the PRODDIR */
  124.         dwLen = _MAX_PATH;
  125.  
  126.     if ((errVal=RegQueryValueEx(volKey,(LPTSTR)"PRODDIR",0,NULL,
  127.                         (unsigned char *)PRODDIR,&dwLen)) != ERROR_SUCCESS) {
  128.         ErrorLog(7);
  129.     printf("Unable to open PRODDIR\n");
  130.     printf("ErrorCode: %d\n", errVal);
  131.     
  132.     }
  133.     /* get the NETSCAPEHOME */
  134.         dwLen = _MAX_PATH;
  135.  
  136.     if ((errVal=RegQueryValueEx(volKey,(LPTSTR)"NETSCAPEHOME",0,NULL,
  137.                         (unsigned char *)NETSCAPEHOME,&dwLen)) != ERROR_SUCCESS) {
  138.         ErrorLog(7);
  139.     printf("Unable to open PRODDIR\n");
  140.     printf("ErrorCode: %d\n", errVal);
  141.     
  142.     }
  143.     
  144. //#endif
  145.  
  146.   // execute httpd -- jeeves
  147.  
  148.   //char *Query = convertQuery(getenv("QUERY_STRING"));
  149.   SetEnvironmentVariable((LPCTSTR)"PATH",(LPCTSTR)PATH);
  150.   SetEnvironmentVariable((LPCTSTR)"CLASSPATH",(LPCTSTR)CLASSPATH);
  151.   SetEnvironmentVariable((LPCTSTR)"JAVA_EXE",(LPCTSTR)JAVA_EXE);
  152.   SetEnvironmentVariable((LPCTSTR)"JAVAHOME",(LPCTSTR)JAVAHOME);
  153.  
  154. #if 0
  155.   /*printf ("%s\n%s\n%s\n%s\n%s\n%s\n",PATH,CLASSPATH,JAVA_EXE,JAVAHOME,PRODDIR,NETSCAPEHOME);*/
  156.  
  157.   char *Cmd = new char[strlen(JAVA_EXE)+strlen(" -Dserver.root=")+strlen(PRODDIR)+strlen("\\.bin\\httpd\\win32\\jeeves -noasyncgc sun.server.http.HttpServer")+5];
  158.   //char *Cmd = new char[strlen(PRODDIR)+strlen("\\.bin\\httpd\\win32\\jeeves\\bin\\httpd.exe")+5];
  159.  
  160.   sprintf(Cmd,"%s -Dserver.root=%s\\.bin\\httpd\\win32\\jeeves -noasyncgc sun.server.ServerProcess",JAVA_EXE,PRODDIR);
  161.   //sprintf(Cmd,"%s -Dserver.root=%s\\.bin\\httpd\\win32\\jeeves -noasyncgc sun.server.http.HttpServer",JAVA_EXE,PRODDIR);
  162.   //sprintf(Cmd,"%s\\.bin\\httpd\\win32\\jeeves\\bin\\httpd.exe",PRODDIR);
  163.   
  164.  
  165.    printf("\n\nStarting HTTP Java Server ...\n\n");
  166. #else
  167.  
  168.    char *Cmd = new char [strlen(PRODDIR) + 100];
  169.    
  170.    sprintf(Cmd, "%s\\.bin\\httpd\\win32\\fnord\\fnord.exe", PRODDIR);
  171.    printf("\n\nStarting HTTP server ...\n\n");
  172.  
  173. #endif // FNORD !!
  174.  
  175.     STARTUPINFO  StartInfo;
  176.     PROCESS_INFORMATION ProcessInfo;
  177.     
  178.     ZeroMemory((void *)&StartInfo, sizeof(STARTUPINFO));
  179.     ZeroMemory((void *)&ProcessInfo, sizeof(PROCESS_INFORMATION));
  180.  
  181.     StartInfo.cb = sizeof(STARTUPINFO);
  182.     StartInfo.lpDesktop = "";
  183.     StartInfo.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
  184.     //StartInfo.hStdOutput = (HANDLE CreateFile();
  185.     StartInfo.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
  186.     StartInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE);
  187.     StartInfo.dwFlags = STARTF_USESTDHANDLES;
  188.             
  189.     if (!CreateProcess(NULL,(LPTSTR)Cmd,NULL,NULL,TRUE,
  190.         NULL,NULL,NULL,
  191.                        &StartInfo,&ProcessInfo)) {
  192.         printf("create process failed: %d \n", GetLastError());
  193.         // delete[] Cmd;
  194.  
  195.     }
  196.     char *end_proc = (char *) malloc(5);
  197.     char *end_thrd = (char *) malloc(5);
  198.  
  199.     WaitForSingleObject(ProcessInfo.hProcess,1500);
  200.  
  201.     delete[] Cmd;
  202.  
  203.     //GetExitCodeProcess(ProcessInfo.hProcess,(LPDWORD)end_proc);
  204.     //GetExitCodeThread(ProcessInfo.hThread,(LPDWORD)end_thrd);
  205.     //printf("Exit code proc = %s, thread = %s.\n", end_proc, end_thrd);
  206.  
  207.     
  208.  
  209. #if 0    
  210.     //system(cmdLine);
  211.  
  212.     FILE *Pfile;
  213.     char  ErrFile[_MAX_PATH];
  214.     sprintf (ErrFile,"%s\\doperl.log",scriptDir);
  215.     Pfile = fopen(ErrFile,"w");
  216.     
  217.     int RetVal;
  218.     
  219.     if ((RetVal= system(CmdLine)) != 0) {
  220.         
  221.         switch (errno) {
  222.             case E2BIG:  
  223.                 fprintf(Pfile, "doperl failure: Argument list is too big\n");
  224.                 break;
  225.                 
  226.              case ENOENT:
  227.                fprintf(Pfile, "doperl failure: Command interpreter cannot be found\n");
  228.             break;
  229.             
  230.             case ENOEXEC:
  231.                fprintf(Pfile, "doperl failure: Command interpreter file has invalid format and cannot be executed\n");
  232.                break;
  233.             
  234.             case ENOMEM:
  235.                fprintf(Pfile, "doperl failure: Insufficient memory to run the command\n");
  236.                break;
  237.              default:
  238.                if (errno == -1)
  239.                     fprintf(Pfile, "doperl failure: Unknown error\n");
  240.                else if (errno == 0)     
  241.                fprintf(Pfile, "doperl failure: perl returned %d\n", retVal);
  242.                else if (errno != 0)
  243.                    fprintf(Pfile, "perl error: %d\n", errno);
  244.                else 
  245.                    fprintf(Pfile, "doperl succeeded\n");
  246.                break;
  247.            }
  248.    }
  249.        
  250.     else
  251.         fprintf(Pfile, "doperl succeeded\n");
  252.     
  253.     fclose(Pfile);
  254.  
  255. #endif
  256.                 
  257.  
  258.     char *cmdLine = new char[strlen(NETSCAPEHOME) + 15];
  259.     
  260.     
  261.     sprintf(cmdLine,"%s",NETSCAPEHOME);
  262.  
  263.     printf ("\n\nStarting Netscape ...\n\n%s",cmdLine);
  264.  
  265.  
  266.     STARTUPINFO  startInfo;
  267.     PROCESS_INFORMATION processInfo;
  268.     
  269.     ZeroMemory((void *)&startInfo, sizeof(STARTUPINFO));
  270.     ZeroMemory((void *)&processInfo, sizeof(PROCESS_INFORMATION));
  271.     
  272.     startInfo.cb = sizeof(STARTUPINFO);
  273.     startInfo.lpDesktop = "";
  274.     startInfo.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
  275.     startInfo.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
  276.     startInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE);
  277.     startInfo.dwFlags = STARTF_USESTDHANDLES;
  278.     
  279.     
  280.         
  281.     if (!CreateProcess(NULL,(LPTSTR)cmdLine,NULL,NULL,TRUE,
  282.                        0,NULL,NULL,
  283.                        &startInfo,&processInfo)) {
  284.         printf("create process failed: %d %s \n", GetLastError(), _strerror("error string"));
  285.         // delete[] cmdLine;
  286.     
  287.     }
  288.     
  289.     WaitForSingleObject(processInfo.hProcess,INFINITE);
  290.     printf("\n before pulse \n");
  291.     PulseEvent(ProcessInfo.hProcess);
  292.     printf("\n after pulse \n");
  293.     CloseHandle(processInfo.hProcess);
  294.     CloseHandle(processInfo.hThread);
  295.  
  296.     delete[] cmdLine;
  297.     Sleep (10 * 1000);
  298.  
  299.     /* Shut down the httpd server */
  300.     
  301.     //LPDWORD = debug;
  302.  
  303.     LPDWORD *debug = (LPDWORD *) malloc(5);
  304.     GetExitCodeProcess (ProcessInfo.hProcess, (LPDWORD)&debug);
  305.     printf("\nerror code=%p\n",&debug);
  306.  
  307.     printf("\nTerminate process\n");    
  308.     TerminateProcess (ProcessInfo.hProcess,0);
  309.     TerminateThread (ProcessInfo.hThread,0);
  310.  
  311.     printf("Close handles");
  312.     CloseHandle(ProcessInfo.hProcess);
  313.     CloseHandle(ProcessInfo.hThread);
  314.  
  315.  
  316.     GenerateConsoleCtrlEvent(CTRL_C_EVENT,ProcessInfo.dwProcessId);
  317.     printf("send ctrl c");
  318.     GenerateConsoleCtrlEvent(CTRL_C_EVENT,ProcessInfo.dwProcessId);
  319.     printf("send ctrl c");
  320.     GenerateConsoleCtrlEvent(CTRL_C_EVENT,ProcessInfo.dwProcessId);
  321.     printf("send ctrl c");
  322.     //GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT,ProcessInfo.dwProcessId);
  323.     //added
  324.  
  325.     
  326.     
  327.     //ExitProcess(0);
  328.     printf("\nexiting");
  329.         
  330. #if 0    
  331.     //system(cmdLine);
  332.  
  333.     FILE *pfile;
  334.     char  errFile[_MAX_PATH];
  335.     sprintf (errFile,"%s\\excite.log",cgiDir);
  336.     pfile = fopen(errFile,"w");
  337.     
  338.     int retVal;
  339.     
  340.     if ((retVal= system(cmdLine)) != 0) {
  341.         
  342.         switch (errno) {
  343.             case E2BIG:  
  344.                 fprintf(pfile, "doperl failure: Argument list is too big\n");
  345.                 break;
  346.                 
  347.              case ENOENT:
  348.                fprintf(pfile, "doperl failure: Command interpreter cannot be found\n");
  349.             break;
  350.             
  351.             case ENOEXEC:
  352.                fprintf(pfile, "doperl failure: Command interpreter file has invalid format and cannot be executed\n");
  353.                break;
  354.             
  355.             case ENOMEM:
  356.                fprintf(pfile, "doperl failure: Insufficient memory to run the command\n");
  357.                break;
  358.              default:
  359.                if (errno == -1)
  360.                     fprintf(pfile, "doperl failure: Unknown error\n");
  361.                else if (errno == 0)     
  362.                fprintf(pfile, "doperl failure: perl returned %d\n", retVal);
  363.                else if (errno != 0)
  364.                    fprintf(pfile, "perl error: %d\n", errno);
  365.                else 
  366.                    fprintf(pfile, "doperl succeeded\n");
  367.                break;
  368.            }
  369.    }
  370.        
  371.     else
  372.         fprintf(pfile, "doperl succeeded\n");
  373.     
  374.     fclose(pfile);
  375.  
  376. #endif
  377.    
  378. printf("at the end");
  379.     
  380. }
  381.  
  382.     
  383.     
  384.                  
  385.                  
  386.